import globals from "globals";
import pluginJs from "@eslint/js";
import { configs, parser } from 'typescript-eslint'
import tsParser from '@typescript-eslint/parser'
import pluginVue from "eslint-plugin-vue";

// 导入这个可以一次性设置 `eslint-plugin-prettier` 和 `eslint-config-prettier` 
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'

/** @type {import('eslint').Linter.Config[]} */
export default [
  // ignores 提升为全局忽略项
  {

    ignores: [
      'src/uni_modules/',
      'src/static/',
      '.vscode',
      '.husky',
      '*.sh',
      'node_modules',
      '*.md',
      '*.woff',
      '*.ttf',
      '.idea',
      'dist',
      '/public',
      '/docs',
      '.local',
      '/bin',
      '/src/mock/*',
    ],

  },
  // 全局 files 指定 ESlint 匹配的文件
  {
    files: ['**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx,vue}']
  },
  // 基础配置
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node
      },
      parser: tsParser,
      ecmaVersion: 'latest',
      sourceType: 'module'
    }
  },
  // 仅对所有 vue 文件的自定义配置
  {
    files: ["**/*.vue"],
    languageOptions: {
      parserOptions: {
        parser: parser
      }
    }
  },
  // 自定义 rules
  {
    rules: {
      // 不允许存在未使用的变量
      '@typescript-eslint/no-unused-vars': 'warn',
      // vue 组件必须多单词驼峰命名，关闭它
      'vue/multi-word-component-names': 'off',
      // 禁止变量重新声明
      '@typescript-eslint/no-redeclare': 'error',
      // 禁止变量重新声明，与 @typescript-eslint 重复提示了，关闭它
      'no-redeclare': 'off'
    }
  },
  // @eslint/js 扩展插件
  pluginJs.configs.recommended,
  // typescript-eslint 扩展插件
  ...configs.recommended,
  // eslint-plugin-vue 扩展插件
  ...pluginVue.configs["flat/essential"],
  // Prettier 扩展插件
  ...eslintPluginPrettierRecommended
];